/**
 * WlDrDao.java
 * <p>
 * Copyright 2012 Petro-CyberWorks Information & Technology Co., Ltd.	All right reserved.
 */
package com.liangtian.mdm.material.dao;

import java.util.List;
import java.util.Map;

import org.springframework.stereotype.Repository;

import com.liangtian.mdm.base.BaseDao;
import com.liangtian.mdm.material.model.WlDr;
import com.liangtian.mdm.material.model.WlDrTzl;
import com.liangtian.mdm.material.model.WlwlLan;
import com.liangtian.mdm.system.user.model.SysUser;

/**
 * 导入表物料数据数据库操作接口
 * @author jyh
 * @date 2016-09-23
 */

@Repository
public interface WlDrDao extends BaseDao<WlDr> {

    /**
     * 根据id找导入物料数据
     * @param id 数据ID
     * @return
     * @author jyh
     * @date 2016-09-23
     */
    public WlDr getWlDrByWym(String id);

    /**
     * 查找导入表物料特征量数据
     * @param cond
     * @return
     * @author jyh
     * @date 2016-09-23
     */
    public List<WlDrTzl> getWlDrTzl(Map<String, Object> cond);

    /**
     * 插入数据
     * @param wlDr
     * @author jyh
     * @date 2016-09-23
     */
    public void insertWlDr(WlDr wlDr);

    /**
     * 更新导入物料的指定字段
     * @param map key:需要更新的字段，value:更新后的值
     * @return 更新成功的条数
     * @author jyh
     * @date 2016-09-23
     */
    public int updateWlDr(Map<String, Object> map);

    /**
     * 删除导入物料数据
     * @param ids
     * @author jyh
     * @date 2016-09-23
     */
    public void deleteWlDrByIdS(List<String> ids);

    /**
     * 根据表唯一码删除特征量明细数据
     * @param ids 物料导入表唯一码
     * @author jyh
     * @date 2016-09-23
     */
    public void deleteWlDrTzlByWlDrIdS(List<String> ids);

    /**
     * 逻辑删除导入物料数据
     * @param cond 过滤数据的查询条件
     * @return 被逻辑删除的数据个数
     * @author jyh
     * @date 2016-09-23
     */
    public int logicDeleteWlDrByIdS(Map<String, Object> cond);

    /**
     * 批量插入导入物料的特征量数据
     * @param wlDrTzl
     * @author jyh
     * @date 2016-09-23
     */
    //TODO 待修改，批量插入操作
    public void batchInsertWlDrTzl(Map<String, List<WlDrTzl>> map);

    /**
     * 根据导入物料ID删除其特征量数据
     * @param wlDrId
     * @author jyh
     * @date 2016-09-23
     */
    public void deleteWlDrTzlByWlDrId(String wlDrId);

    /**
     * 根据综合条件查询导入表物料
     * @param cond
     * @return
     * @author jyh
     * @date 2016-09-23
     */
    public List<WlDr> queryWlDr(Map<String, Object> cond);

    /*
     * <p>TODO 导出恒力MDG模板加待提交的数据</p>
     * <p>@param cond
     * <p>@return </p>
     * @author : xiaoliu
     * @date :2017年12月29日下午5:00:12
     */
    public List<WlDr> queryWlDrForHl(Map<String, Object> cond);


    /**
     * 导出物料明细时，根据综合条件查询导入表物料
     * @param cond
     * @return
     * @author jyh
     * @date 2016-09-23
     */
    public List<WlDr> queryWlDrForMxExport(Map<String, Object> cond);

    /**
     * 根据综合条件查询用户待审核的物料
     * @param cond
     * @return
     * @author jyh
     * @date 2016-09-23
     */
    public List<WlDr> queryWlDrApprove(Map<String, Object> cond);

    /**
     * 审核页面导出物料明细时，根据综合条件查询导入表物料
     * @param cond
     * @return
     * @author jyh
     * @date 2016-09-23
     */
    public List<WlDr> queryWlDrApproveForMxExport(Map<String, Object> cond);

    /**
     * 根据综合条件查询出的导入表物料总记录数
     *
     * @param cond
     * @return
     * @author jyh
     * @date 2016-09-23
     */
    public int queryWlDrCount(Map<String, Object> cond);

    /**
     * 根据综合条件查询出用户待审核的导入表物料总记录数
     * @param cond
     * @return
     * @author jyh
     * @date 2016-09-23
     */
    public int queryWlDrApproveCount(Map<String, Object> cond);

    /**
     * 校验指定用户导入的指定小类下的物料
     * @param lbbm
     * @param creator_account
     * @return
     * @author jyh
     * @date 2016-09-23
     */
    public void checkoutWlDr(Map<String, Object> cond);

    /**
     * 提交无错误物料之前进行一些排重行校验
     * @param wym 导入表物料的唯一码
     * @return false：不允许走审批流程；true：允许走审批流程
     * @author jyh
     * @date 2016-09-23
     */
    //TODO 原3.0系统此方法调用存储过程
    public boolean checkBeforeSubmit(String wym);

    /**
     * 查询用户待审批的物料数据
     * @param cond 查询条件
     * @return
     * @author jyh
     * @date 2016-09-23
     */
    //TODO 原3.0系统此方法 return null
    public List<WlDr> queryApproveData(Map<String, Object> cond);

    /**
     * 产生正式物料
     * @param map 存储过程需要的参数
     * @return
     * @author jyh
     * @date 2016-09-23
     */
    //TODO 原3.0系统此方法调用存储过程
    public String createWl(Map<String, String> map);

    /**
     * 导入表提交时自动产生正式物料
     * @param wym 导入表物料的唯一码
     * @return
     * @author jyh
     * @date 2016-09-23
     */
    //TODO 原3.0系统此方法调用存储过程
    public String autoCreateWl(String wym);

    /**
     * 快速找出用户所输入长描述的相匹配值
     * @param cond
     * @return
     * @author jyh
     * @date 2016-09-23
     */
    public List<WlwlLan> getQcSimilar(Map<String, Object> cond);

    /**
     * 找出能审核具体导入表物料的审核员
     * @param wlDrId 导入表物料的id
     * @param unitPermission 是否需要根据单位权限过滤
     * @return
     * @author jyh
     * @date 2016-09-23
     */
    //TODO 需要在service中处理
    public List<SysUser> getApproverLstByWlDrId(String wlDrId, String unitPermission);

    /**
     * 审核员编辑物料时，保存前进行校验
     * @param wym 当前导入表物料的唯一码
     * @param qc_no_ljfh 没有连接符号的长描述
     * @return 错误信息
     * @author jyh
     * @date 2016-09-23
     */
    //TODO 原3.0系统此方法调用存储过程
    public String checkWhenShrEdit(String wym, String qc_no_ljfh);

    /**
     * 获取对应级别的公司代码，单位级别大于三级的获取三级单位，小于等于三级的返回公司代码
     * @param gsdm
     * @return
     * @author jyh
     * @date 2016-09-23
     */
    //TODO 原3.0系统此方法调用存储过程
    public String getUnitCode(String gsdm);

    /**
     * 移动端查询一条物料待审数据明细
     * @param cond
     * @return
     * @author jyh
     * @date 2017-06-15
     */
    public Map<String, Object> queryApprDetailMoBile(Map<String, Object> cond);

    /**
     * 移动端查询物料待审数据
     * @param cond
     * @return
     * @author jyh
     * @date 2017-06-15
     */
    public List<Map<String, Object>> queryApproveMoBile(Map<String, Object> cond);

    /**
     *  当前用户提交物料数据排重
     *  @author xiuzhangl
     *  @date 2017年8月29日 下午3:59:56
     *    @param map
     *    @return
     */
    public List<WlDr> checkByCur(Map map);

    /**
     * 类别计量单位删除时判断物料表中是否有此计量单位的数据
     * @param cond
     * @return
     
     * @date 2017-11-06
     */
    public int getCountByDelLbJldw(Map<String, Object> map);

    /**
     * 类别修改删除时判断物料表中是否有此类别的数据
     * @param cond
     * @return
     
     * @date 2017-11-07
     */
    public int getCountByLbUpdAndDel(Map<String, Object> map);

    /**
     * 根据id找审核页提交和变更的物料数据
     * @param id 数据ID
     * @return
     * @author ly
     * @date 2017-11-14
     */
    public WlDr getApproveByWym(String id);

    /**
     * 万达需求，根据特征量说明生成橡胶专用编码
     * @param cond
     */
    public void generateWandaXjbm(Map<String, Object> cond);


    /**
     * 删除wym前，校验是否有不符合删除的数据
     * @param wyms
     * @return
     */
    public int checkCanDelete(String wyms);

}
